library(tidyverse)
library(DESeq2)
Loading required package: SummarizedExperiment
Loading required package: Biobase
Welcome to Bioconductor

    Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see 'citation("Biobase")', and for
    packages 'citation("pkgname")'.

Loading required package: DelayedArray
Loading required package: matrixStats

Attaching package: ‘matrixStats’

The following objects are masked from ‘package:Biobase’:

    anyMissing, rowMedians

The following object is masked from ‘package:dplyr’:

    count


Attaching package: ‘DelayedArray’

The following objects are masked from ‘package:matrixStats’:

    colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges

The following object is masked from ‘package:purrr’:

    simplify

The following objects are masked from ‘package:base’:

    aperm, apply, rowsum
str(deseq.res)
tibble[,11] [1,229,844 × 11] (S3: tbl_df/tbl/data.frame)
 $ samples       : chr [1:1229844] "E-MTAB-5801_intestinal organoid cell_unknown_unknown" "E-MTAB-5801_intestinal organoid cell_unknown_unknown" "E-MTAB-5801_intestinal organoid cell_unknown_unknown" "E-MTAB-5801_intestinal organoid cell_unknown_unknown" ...
 $ data          : chr [1:1229844] "E-MTAB-5801" "E-MTAB-5801" "E-MTAB-5801" "E-MTAB-5801" ...
 $ cell.type     : chr [1:1229844] "intestinal organoid cell" "intestinal organoid cell" "intestinal organoid cell" "intestinal organoid cell" ...
 $ condition     : chr [1:1229844] "unknown" "unknown" "unknown" "unknown" ...
 $ duration      : chr [1:1229844] "unknown" "unknown" "unknown" "unknown" ...
 $ gene_name     : chr [1:1229844] "A1BG" "A1BG-AS1" "A1CF" "A2M" ...
 $ baseMean      : num [1:1229844] 300.9 22.9 40.5 3834.9 15 ...
 $ log2FoldChange: num [1:1229844] 1.102 0.19 -0.434 0.55 1.353 ...
 $ lfcSE         : num [1:1229844] 0.311 0.434 0.455 0.325 0.628 ...
 $ pvalue        : num [1:1229844] 9.08e-05 5.58e-01 2.01e-01 4.85e-02 4.17e-03 ...
 $ padj          : num [1:1229844] 0.000901 0.721331 0.372606 0.133697 0.020512 ...

human orthologs

tf.hits <- read_xlsx("../data/83 direct targets that have human homologs.xlsx")
tf.hits <- tf.hits %>% filter(`Human Ortholog` != "N.A.") # Remove genes with no human orthologs
tf.hits$ENSG <- sapply(strsplit(tf.hits$`Human Ortholog`, " "), `[[`, 1)
ortho <- tf.hits %>%
  select(ENSG) %>%
  distinct()

genes.deseq <- counts %>% 
  select(GeneName) %>% 
  dplyr::rename(Gene = GeneName)

gene.id <- read_tsv("../../bono_hirota_2020/170704all_HN2.txt") %>%
  select(ENSG_Gene) %>%
  separate(ENSG_Gene, into = c("ENSG", "Gene"), sep = "_", extra = "merge")

── Column specification ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
cols(
  Gene = col_character(),
  ENSG_Gene = col_character(),
  up = col_double(),
  down = col_double(),
  unchanged = col_double(),
  ENSG = col_character()
)
final.ortho <- left_join(genes.deseq, gene.id, by = "Gene") %>%
  left_join(ortho, ., by = "ENSG") %>%
  filter(!is.na(Gene)) %>%
  arrange(Gene) 

Percentile of orthologs in gene expression changes

ecdf_fun <- function(data, genes) {
  x <- data$log2FoldChange
  perc <- data$log2FoldChange[data$gene_name %in% genes]
  out <- ecdf(x)(perc)
  names(out) <- genes
  return(out)
  }

perc.ortho <- deseq.res %>%
  arrange(samples, gene_name) %>%
  group_by(samples, data, cell.type, condition, duration) %>%
  group_modify(~ ecdf_fun(data = ., genes = final.ortho$Gene) %>%
                 enframe(name = "Gene", value = "quantile"))

perc.ortho

write_csv(deseq.res, "../output/tables/human_hypoxia_diff_expression.csv")
write_csv(perc.ortho, "../output/tables/worm_orthologs_human_hypoxia_percentile.csv")
ggsave(ortho.perc.1, filename = "../output/plots/plot.dist.percentile.human.hypoxia.ortholog.pdf", width = 20, width = 15)
Error in ggsave(ortho.perc.1, filename = "../output/plots/plot.dist.percentile.human.hypoxia.ortholog.pdf",  : 
  formal argument "width" matched by multiple actual arguments

d2$log2FoldChange[d2$gene_name %in% tf.hits$Gene]
   [1] -0.6340042162 -0.4847606734  0.4008209642  0.9284774719  0.3298327834  0.3046531092 -0.0701485041  0.0702380192  2.6414492267  0.5894264176
  [11] -0.4562827962            NA  0.4424907113  0.3474923137  0.6039854970  0.1346481612 -0.9838611492 -0.0585092028  0.1520630941 -0.8471345462
  [21]  1.6557951532 -0.1560669252  0.1583966410  0.0626795270 -0.2705245078  1.2463932408  2.6147020635 -0.7370919100            NA  0.3446267084
  [31] -0.0453977680  0.0230738121  0.5227303822 -0.7886389009 -0.4876244627 -0.2667928855  1.2102422833 -0.5751376161 -0.1396670677 -0.0202352322
  [41]  1.0347071238  0.0787551924 -0.4957502529  0.0728409348  1.4650271564  1.2467574636 -0.1832625594 -0.4249405741  0.5153555739  0.7719156366
  [51] -0.1813558034  0.7120998501 -0.1098651598 -1.0261033599  0.1213996863  0.3895775957 -0.1113627651 -0.8708226383  0.7892566743  1.0393256544
  [61] -0.5920314148 -0.5309805455 -0.4309874442  0.3163425996 -1.5440490195  0.0468787005 -0.0599339729 -0.3554594223            NA  0.4534608765
  [71]  0.8100612651 -2.3990929384  0.0533998202 -0.2760566162 -0.9769570598  0.0880490154  0.3246006110  0.2887232027  1.4793409517  0.0276997336
  [81] -0.1673813595  0.0227486789  0.0817434106 -0.0286561226 -0.1928925648 -0.1734132930            NA  0.8397830419  0.4125961239 -0.0405944662
  [91]  0.1462768324 -0.0044081293 -0.0295534300  0.0769579665 -0.0145938634  0.4804786029 -0.5630714040 -0.2807380489            NA  0.5678829380
 [101]  1.9596354969  1.5987011724  0.9818420560  0.0395861165  0.8429977996  0.0323640228            NA  0.0918385997 -0.0932425623 -0.0762727290
 [111] -0.5780491916  1.4255484614  0.7797726766 -0.2175382237            NA  0.3136171954 -0.2108914410  0.1583573886 -0.0433903160  4.7193823171
 [121]  0.4639966448 -0.1554651074 -0.0719650807 -0.7484465994 -0.6053686532            NA  0.1677334858 -0.0265184498  0.1975917962  0.4829081285
 [131]  0.0471757989 -0.0339932382 -0.9253257141 -1.0197092303 -0.3127778078  0.0776490069  0.0274952644  0.7169704571  0.0192536585 -0.2225965288
 [141]  0.3592548936 -0.2198905462 -0.0120278018            NA  0.5288354402  1.4777660866  0.0568997766 -0.3974504300 -0.0151858080 -0.0873242104
 [151] -0.0803811414 -0.0315879667  0.0071674036  1.2280225724 -0.0859522011  0.0749002737            NA -0.0317715237  0.0401367176  0.1422572645
 [161]  0.0095073141  0.0117176276  0.3102562719  0.6443703162  0.0052074975 -0.0946178413 -0.1696457382            NA  0.0021181556 -0.0577364186
 [171]  0.0082676792 -0.2438901343 -0.0074218710 -0.0086577512  0.0526978587  0.5025037959  2.0724212618 -0.3126445887            NA  0.3003504721
 [181]  0.0096749045            NA  0.2668113691  0.0301962497 -0.1672391297 -0.0958203120  1.5820374290  0.0046289561 -0.1240085211            NA
 [191] -0.0601615048  0.0667710632 -0.0284569981  0.0819307910  4.0582000628  0.0134896335 -0.0117701483  0.0047677866 -0.0220953669 -0.1606674227
 [201] -0.0037035556 -0.0386710977  0.1452843425 -0.1466616537 -0.0945078118  0.0303299298  0.0863616821 -0.2326567078 -0.4705201862 -0.5634945275
 [211] -0.1896452871 -0.0034247290  0.0532649664            NA -0.1442128159  0.0540719139 -0.2123576395  0.1210185773 -0.0086577512  0.1453999734
 [221]  0.8848094012 -0.3185228555 -0.4789588144 -0.0010600737 -0.0161586475 -0.0678150011  0.1521520961 -0.1768306309  1.2783721864  0.0620769828
 [231]  0.2100669845 -0.0159026621  0.6101100656  0.0011680776  0.2189853028  0.0912567570            NA -0.0883644792  0.3295117085 -0.4258848205
 [241]  0.2308731527 -0.1509002157  0.0119094203  0.0897205972 -0.1786173542 -0.0146473151 -0.0670179012  0.0119094203  0.0126199302 -0.1560504468
 [251]  0.4462692353  1.3608945589 -0.1039876267  0.0273959043  0.1853268201  0.0119561745            NA  0.2751959954 -0.2203731790  0.1492339568
 [261]  0.0671960121  1.2662303645  0.5134495172  0.0794115505 -0.0151082641 -0.1656695909 -0.2382849307 -0.1481647287  0.0895364850  3.3967506681
 [271]  0.2448758046 -0.0876199766 -0.0416913443 -0.4263902226 -0.6639064255            NA -0.0398985154  0.3413190681 -0.2542778552  1.2326930119
 [281]  0.3201691100 -0.0639909335 -0.1794531460  0.2716127023  0.0443805002 -0.0509329198  0.2170124550 -0.0261647439  0.1892942924 -0.1228439337
 [291]  0.3350162409 -0.2559736027 -0.1918837036            NA -0.0279479798  0.1199014036 -0.1627021937  0.2072422227 -0.0994447998 -0.1688804608
 [301]  0.0838956816 -0.1744574903 -0.1360073724  1.6101390448  0.0828587678 -0.1956520271 -0.0194405438 -0.1538834455 -1.2261506560 -0.4897352041
 [311] -0.0849792215            NA  0.4456924573  0.0639656811 -0.0633095141  0.2748623426  0.1061735811  0.0156643786  0.2281394844  0.1655978399
 [321]  0.0740899624 -0.8174304518 -0.3304502907            NA  0.4381674039  1.0693060196  1.6738188659 -0.0178973006            NA  0.5167891552
 [331]  0.0214663358            NA -0.0398924095  0.1264304623 -0.0805556587 -0.2669691640  2.6987852828  0.8458762442 -0.3435427666            NA
 [341]  0.3788442891 -0.2071533512  0.1235201697 -0.0109961602  4.1990465649  0.3478637780 -0.2955957809 -0.1239793637 -0.7142583620 -1.8014892412
 [351]            NA  0.2413478652 -0.4569517169 -0.1177649992 -0.0205686435 -0.2201516927 -0.5516499029 -0.4809603981 -1.5375498352 -0.3397688016
 [361]  0.0233923463  0.1968865308  0.0355299007  0.1968518540 -0.0070815809 -0.0623411943 -0.0661690417 -0.2287453956            NA  0.0899297293
 [371]  1.5328626947  0.1384015402 -0.2536374335  0.1302929605 -0.1044272927 -0.6859649955  0.9957862231  1.4039833326  1.4606047333  0.1674775967
 [381]  0.0216307234  0.0774940166  0.2837734699  0.0734038439 -0.7901434271 -0.1726234476            NA  1.1347531292  0.7417024565  0.3675678476
 [391]  0.0990905765 -0.3257866307 -0.4083949151 -0.0585060489  0.0778076138 -0.0444850170 -0.4747065299  0.4334400046            NA -0.2368264467
 [401]  1.7291793326  2.2459877502  2.0515690463  0.0813135515  1.1112010137 -0.0694340146            NA  0.4861321636 -0.5339995550 -0.3073541755
 [411]  0.1830551153  1.1388425005  0.6373965564 -1.1519447186  0.3997939655  0.7496313587  0.0170666171 -0.0901086616  0.0174515673  6.0825224527
 [421]  1.0374804207  0.5330845313  0.5599707699 -1.1868980012  0.3734818778 -0.0249844405 -0.0400193851  0.0765946325 -0.3934051462 -0.0333199125
 [431] -0.1025861515 -0.7426112598 -0.9137830593  0.2162851830 -1.2058928658  0.4072823215  0.0245271060  0.3212239704            NA -1.1335563569
 [441]  0.4499433243 -0.7071892837  0.1897514740            NA  0.7740914330  0.6622760181 -0.9966906813  0.9590621403  0.0576989037 -0.4036433615
 [451] -0.4169255984  0.4283429500 -0.0514245558  2.0041641608  0.2921962366 -0.2336228925  0.0407321370 -0.1252669219  0.0308383080 -1.1897161515
 [461] -0.0457162227  0.0010035612  0.6416295142  0.7463763997 -0.3184253105 -0.1617542625 -0.0953344623 -0.0312615561 -0.0377738697  0.2192702678
 [471]  0.2709660096 -0.6382944919  0.4838602057            NA -0.3917149001  1.8950025796  3.0432548644  0.0964773557 -0.0312615561  1.8047582194
 [481] -0.0359788524            NA  0.7770678671 -0.1045804424  0.3909365339 -0.6315151414  1.9154322905  0.5868935532 -0.4028347392  0.0015461319
 [491]  0.6954094959 -0.0704703223 -0.0054492227 -0.0385257875  5.9764378928  0.7746990605 -0.3767955024  0.4013435286 -0.5313653203  1.2313473645
 [501]  0.0517734823  0.2864852680 -0.4066168286  0.3646507961 -0.0222724899  0.4241365392  0.3102536813 -1.1798326249 -0.3528648982  0.1092132174
 [511]  0.0574886505  0.1057767333  0.2667913145  0.0418994936 -0.4337570113 -0.0746507132 -0.8764927836  0.2323847913            NA  0.4183004710
 [521]  1.8743123479 -0.6528575938  0.4954870346  0.2989164760 -0.0123309875 -0.6315728550  0.0585189932  0.1840405864  0.6202396806  0.2413952358
 [531]  0.0188000389            NA -0.4194187452 -0.4084634004 -1.0831819168 -0.1219729805  0.0080505440  0.5144915873  0.7615909431  0.3378593465
 [541]  0.1302606809 -0.3696920107 -0.0597733807 -0.1447975316  0.1897640634  0.0114384948 -2.4658866242  0.0320888507  0.0417694789 -0.5346940588
 [551]  0.9331073253  1.2981502973 -0.0295653349            NA  0.3025106866            NA  0.0198818596  0.3828112320  0.0576483911 -0.4266665129
 [561]  0.0294200975  0.4615553328 -0.2070550119  0.1050404890            NA  1.0248994111 -0.0063000148  0.1524382743  0.5045215987  3.4765952541
 [571]  0.4267199321  0.7024105503  0.0366904790 -0.0583152399  0.0847556335  0.0956198065  0.1009777884 -0.0407589568 -0.2532911958 -0.3366872570
 [581] -0.0269286117  0.1182304886 -0.9811192067 -0.0671406346 -0.4449178824 -0.6227497298 -0.0468210501  0.6639270775 -0.0220158831 -0.8727462646
 [591]  0.2093033897 -0.3365405606 -0.3483385573            NA  0.1111836408  0.5349462787 -0.6202493057  0.0905520997  0.0089954599 -0.0947016399
 [601] -0.3928772238  1.5967773657 -0.1884428711  2.5875015980  0.1178888507 -0.0324179045  0.0266308575  0.0068307633            NA -0.7371194145
 [611]  0.0732763364            NA  0.5814939892  0.3245974424  0.2922258698  0.1334041638 -0.5649499261            NA  0.0141144000 -0.0430404256
 [621]            NA -1.2399062744  0.1533301204  0.0758655096  0.4352233053  1.6209084841  2.4395575398 -0.0198636821            NA  0.6353338798
 [631]  0.0270303605            NA  0.1992726697 -0.1086317381  0.3488189880  0.5706822344  2.0054854989  0.3861776590 -0.0545962158            NA
 [641]  0.5014610895 -0.0441108696  0.2318692366 -0.1696338634  5.0523272322  0.1433015653  0.1645050517 -0.0506583017 -1.3456452047  1.8399596163
 [651]            NA -0.0074403348 -0.1425522901 -0.4736806393 -0.3494373766 -0.1307795562 -0.0050505248 -0.3844405385 -1.4022083222 -0.3900211545
 [661] -0.0938617337 -0.0115188772 -0.0820301317  0.0266308575 -1.1113923833  0.0697337215 -0.1022759752  0.0971017994            NA  0.5515065608
 [671]  0.6196093029 -1.2713329413  0.7207443875  0.1525430885 -0.0422418113  0.0018393263 -0.2299428467 -0.0001400235  1.1018994802  0.0751551735
 [681]  0.0206104869            NA -0.1019953698 -0.0090002793  0.0468708411  0.0001746455            NA  0.1579357035 -0.0245050546  0.0897748160
 [691]  0.0320072250 -0.0906472536            NA -0.0166962512 -0.0457283346            NA -0.1798827162  0.1504659165            NA  0.2712450493
 [701]  1.5476496957  1.6381030794  0.4035707167            NA  0.1541807902  0.0101232555            NA -0.0274963087 -0.2176498317 -0.0826622575
 [711] -0.1569572237  1.6446890689  0.1896609916 -0.1168354228  0.0403094452 -0.1530337447 -0.0701085882 -0.1885589921 -0.1307226717  4.1098993249
 [721]  0.7495029030  0.0755810183  0.0632340641 -0.3537128830  0.0719390225            NA  0.0634765699 -0.1871020629 -0.2456103431  0.0166325947
 [731] -0.4491970942  0.0522146123 -0.2099839342 -1.0298093639 -0.5017633832 -0.0291461341 -0.0014216593 -0.2232038608            NA -0.4596302640
 [741]            NA -0.2334846215 -0.1840972313            NA  0.1122388004  1.3831381020 -0.0550382096 -0.0897637848 -0.0048513685  0.1214939516
 [751] -0.0103102756 -0.0794008309  0.0025598704  1.1461026424 -0.0157379667 -0.0201854186 -0.0023192697 -0.0022213910 -0.0067371224 -0.0814212382
 [761] -0.0016432872 -0.0022213910  0.1846511100  0.0181915126  0.0011476830  0.0124662316 -0.0139007225 -0.0019409335  0.0030619579  0.0436586450
 [771] -0.0023192697 -0.0173037978 -0.0020440384  0.0017790926  0.0494770724  0.4936865481  1.0501704090  0.3175537894 -0.0024025061 -0.0563728394
 [781] -0.0019674203 -0.0024025061 -0.0111357292 -0.0027054007  0.0278614436  0.0366895753  1.6614608447  0.0132893059 -0.0278922029 -0.0019674203
 [791] -0.0229878749  0.0379960749 -0.0513882312 -0.0184288570  3.8150304590  0.0256521427  0.0177738493 -0.0079673234 -0.0228089862  0.0822745677
 [801]  0.0147179773 -0.0074845395  0.0442381933 -0.1241337559 -0.0025180261  0.0314581620  0.0112338871 -0.0279362605 -0.0631768064  0.0417511516
 [811]  0.0313326111  0.0005066221  0.0432510509 -0.0056891896 -0.0433051643 -0.0037015881 -0.0307942567 -0.1313831466 -0.0024225928 -0.0199008458
 [821]  0.6840071642  0.3402666939 -0.0109765225  0.0024281440 -0.0047045126  0.0904081017  0.3094985081  0.0195604276  1.0183694177 -0.0797109374
 [831] -0.0890131640            NA -0.0053644114  0.0082346461  0.2490034879  0.0386912120            NA  0.2203802051  0.3250134751  0.0554067761
 [841]  0.0155983671 -0.1279210655            NA  0.0018987193  0.1807071952 -0.0035442829 -0.0303155552 -0.0197809458            NA  0.0083060812
 [851]  0.7742678852  0.7046141956  0.0373557958            NA  0.1170834848 -0.0090006108 -0.0057302275  0.1405289347 -0.0217131722 -0.0956827718
 [861] -0.1252047987  1.2865836187  0.0561128309 -0.0626327364            NA  0.2753064240  0.0282386439  0.0254438757  0.0035242263  1.4748853089
 [871]  0.1121670250 -0.3409015957 -0.1269273798 -0.0098053784 -0.1254916580            NA  0.1248861116  0.1836117254 -0.1136938380  0.6441794407
 [881]  0.1769139883  0.1062332294 -0.4830404817  0.0033096518 -0.0764173659 -0.1203818120  0.0132599574  0.0171184507  0.0047011673 -0.1273779519
 [891]  0.0233074190 -0.0959015080  1.0186091092            NA  0.1359112257  1.2784511586  0.1808426306 -0.1942481932  0.0106061643 -0.0051559648
 [901] -0.1683748140 -0.1885003685 -0.0022009228  0.2978718069 -0.0489228680  1.2049826435            NA -0.5752723662 -0.1419544862  0.0837502038
 [911]  0.2764777224            NA -0.2839277786  0.7476206117 -0.0830035601 -0.3389472798 -0.5461883295            NA  0.0368853239 -0.3246807512
 [921] -0.0869859665 -0.0852938653 -0.1916573656            NA -0.6883269801  0.0743897784  1.0458001787 -0.6056371800  0.0207569310 -0.5368263590
 [931] -0.0183656361            NA  0.5152931595 -0.4689598250 -0.5665474200 -0.0987760257  0.7165078439 -0.0002858425  0.1152599191            NA
 [941]  0.4912290227 -0.3985990344 -0.6448360930  0.6024612188  0.7419578311 -0.0520090704 -0.1216410329  0.0161877360  0.8507813171 -1.2261400507
 [951]  0.0207569310 -0.0077459011  0.0391867890 -1.3454105317  0.0373852421 -1.3332793094 -0.0497480101 -1.0341861308 -1.9211930111 -0.5679198485
 [961] -0.7489744036  0.0632835068 -0.4283508723  0.0605301065 -2.1943176289  0.1027177137 -0.5785574928  0.4812978977            NA  0.1287920818
 [971]  0.2555590612 -0.6827035830 -0.2235709928  0.0264700175 -0.0292711270 -0.7150671519  2.0603393575 -0.9392297700  1.3733192637 -0.0500237516
 [981] -0.3240926985 -3.4078194780 -0.8587558837 -1.7205624309 -0.1060496725 -0.3345062416            NA  0.3871556643  0.4763153029  0.2152028813
 [991] -1.6675253269  0.4979144437 -0.3498117676            NA  1.1039383009            NA -1.2585460574 -0.0898289044  0.2186764963 -0.1671832635
 [ reached getOption("max.print") -- omitted 1475 entries ]
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KERFU2VxMikKbGlicmFyeShnZ3B1YnIpCmBgYAoKYGBge3J9CmNvdW50cyA8LSByZWFkX3RzdigiLi4vLi4vYm9ub19oaXJvdGFfMjAyMC9zYWxtb25faHVtYW4xOC50c3YiKQpjb3VudHMKYGBgCgpgYGB7cn0KaG4yX2NoaXAgPC0gcmVhZF90c3YoIi4uLy4uL2Jvbm9faGlyb3RhXzIwMjAvaHVtYW4xOF9objJfQ2hJUC50c3YiKQpgYGAKYGBge3J9CnJuYV9kYXRhIDwtIHJlYWRfdHN2KCIuLi8uLi9ib25vX2hpcm90YV8yMDIwL3JuYXNlcV9odW1hbjE4LnRzdiIpCmZvcihpIGluIDI6bnJvdyhybmFfZGF0YSkpewogIGlmKGlzLm5hKHJuYV9kYXRhJGh1bWFuW2ldKSkKICAgIHJuYV9kYXRhJGh1bWFuW2ldIDwtIHJuYV9kYXRhJGh1bWFuW2ktMV0KfQpybmFfZGF0YSRkdXJhdGlvbltpcy5uYShybmFfZGF0YSRkdXJhdGlvbildIDwtICJ1bmtub3duIgpybmFfZGF0YSRgTzIgY29uY2VudHJhdGlvbmBbaXMubmEocm5hX2RhdGEkYE8yIGNvbmNlbnRyYXRpb25gKV0gPC0gInVua25vd24iCgpybmFfZGF0YV9wcyA8LSBybmFfZGF0YSAlPiUKICBzZWxlY3QoaHVtYW4sIHNhbXBsZSwgYE8yIGNvbmNlbnRyYXRpb25gLCBkdXJhdGlvbiwgYGh5cG94aWEoU1JSKWAsIGBub3Jtb3hpYShTUlIpYCkgJT4lCiAgdW5pdGUoMTo0LCBjb2wgPSAic2FtcGxlIiwgc2VwID0gIl8iKQoKbXVsdF9yZXAgPC0gcm5hX2RhdGEgJT4lCiAgZ3JvdXBfYnkoaHVtYW4sIHNhbXBsZSwgYE8yIGNvbmNlbnRyYXRpb25gLCBkdXJhdGlvbikgJT4lCiAgdGFsbHkoKSAlPiUKICBhcnJhbmdlKGRlc2MobikpICU+JQogIGZpbHRlcihuID4gMSkgJT4lCiAgdW5pdGUoMTo0LCBjb2wgPSAic2FtcGxlIiwgc2VwID0gIl8iKQoKcm5hX2RhdGFfcHMgJT4lCiAgZmlsdGVyKHNhbXBsZSAlaW4lIG11bHRfcmVwJHNhbXBsZSkgJT4lCiAgd3JpdGVfdHN2KCIuLi8uLi9ib25vX2hpcm90YV8yMDIwL3BzX2ZpbHRlcmVkX2RhdGEudHN2IikKYGBgCmBgYHtyfQpkZXNlcS5yZXMgPC0gcmVhZF9jc3YoIi9kYXRhMi8yMDIxX1JvbmdvL2RhdGFfZnJhbWVzL2Rlc2VxX3Jlc3VsdHMuY3N2IikKZGVzZXEucmVzIDwtIGRlc2VxLnJlcyAlPiUKICBzZXBhcmF0ZShjb2wgPSBzYW1wbGVzLCBpbnRvID0gYygiZGF0YSIsICJjZWxsLnR5cGUiLCAiY29uZGl0aW9uIiwgImR1cmF0aW9uIiksIHNlcCA9ICJfIiwgcmVtb3ZlID0gRikgJT4lCiAgc2VsZWN0KC1jKHNhbXBsZXMsIGxmY1NFKSkKCmBgYAoKIyMgaHVtYW4gb3J0aG9sb2dzCmBgYHtyfQp0Zi5oaXRzIDwtIHJlYWRfeGxzeCgiLi4vZGF0YS84MyBkaXJlY3QgdGFyZ2V0cyB0aGF0IGhhdmUgaHVtYW4gaG9tb2xvZ3MueGxzeCIpCnRmLmhpdHMgPC0gdGYuaGl0cyAlPiUgZmlsdGVyKGBIdW1hbiBPcnRob2xvZ2AgIT0gIk4uQS4iKSAjIFJlbW92ZSBnZW5lcyB3aXRoIG5vIGh1bWFuIG9ydGhvbG9ncwp0Zi5oaXRzJEVOU0cgPC0gc2FwcGx5KHN0cnNwbGl0KHRmLmhpdHMkYEh1bWFuIE9ydGhvbG9nYCwgIiAiKSwgYFtbYCwgMSkKb3J0aG8gPC0gdGYuaGl0cyAlPiUKICBzZWxlY3QoRU5TRykgJT4lCiAgZGlzdGluY3QoKQoKZ2VuZXMuZGVzZXEgPC0gY291bnRzICU+JSAKICBzZWxlY3QoR2VuZU5hbWUpICU+JSAKICBkcGx5cjo6cmVuYW1lKEdlbmUgPSBHZW5lTmFtZSkKCmdlbmUuaWQgPC0gcmVhZF90c3YoIi4uLy4uL2Jvbm9faGlyb3RhXzIwMjAvMTcwNzA0YWxsX0hOMi50eHQiKSAlPiUKICBzZWxlY3QoRU5TR19HZW5lKSAlPiUKICBzZXBhcmF0ZShFTlNHX0dlbmUsIGludG8gPSBjKCJFTlNHIiwgIkdlbmUiKSwgc2VwID0gIl8iLCBleHRyYSA9ICJtZXJnZSIpCgpmaW5hbC5vcnRobyA8LSBsZWZ0X2pvaW4oZ2VuZXMuZGVzZXEsIGdlbmUuaWQsIGJ5ID0gIkdlbmUiKSAlPiUKICBsZWZ0X2pvaW4ob3J0aG8sIC4sIGJ5ID0gIkVOU0ciKSAlPiUKICBmaWx0ZXIoIWlzLm5hKEdlbmUpKSAlPiUKICBhcnJhbmdlKEdlbmUpIAoKYGBgCgojIyBQZXJjZW50aWxlIG9mIG9ydGhvbG9ncyBpbiBnZW5lIGV4cHJlc3Npb24gY2hhbmdlcwpgYGB7cn0KZWNkZl9mdW4gPC0gZnVuY3Rpb24oZGF0YSwgZ2VuZXMpIHsKICB4IDwtIGRhdGEkbG9nMkZvbGRDaGFuZ2UKICBwZXJjIDwtIGRhdGEkbG9nMkZvbGRDaGFuZ2VbZGF0YSRnZW5lX25hbWUgJWluJSBnZW5lc10KICBvdXQgPC0gZWNkZih4KShwZXJjKQogIG5hbWVzKG91dCkgPC0gZ2VuZXMKICByZXR1cm4ob3V0KQogIH0KCnBlcmMub3J0aG8gPC0gZGVzZXEucmVzICU+JQogIGFycmFuZ2Uoc2FtcGxlcywgZ2VuZV9uYW1lKSAlPiUKICBncm91cF9ieShzYW1wbGVzLCBkYXRhLCBjZWxsLnR5cGUsIGNvbmRpdGlvbiwgZHVyYXRpb24pICU+JQogIGdyb3VwX21vZGlmeSh+IGVjZGZfZnVuKGRhdGEgPSAuLCBnZW5lcyA9IGZpbmFsLm9ydGhvJEdlbmUpICU+JQogICAgICAgICAgICAgICAgIGVuZnJhbWUobmFtZSA9ICJHZW5lIiwgdmFsdWUgPSAicXVhbnRpbGUiKSkKCnBlcmMub3J0aG8KCndyaXRlX2NzdihkZXNlcS5yZXMsIGd6ZmlsZSgiLi4vb3V0cHV0L3RhYmxlcy9odW1hbl9oeXBveGlhX2RpZmZfZXhwcmVzc2lvbi5jc3YuZ3oiKSkKd3JpdGVfY3N2KHBlcmMub3J0aG8sICIuLi9vdXRwdXQvdGFibGVzL3dvcm1fb3J0aG9sb2dzX2h1bWFuX2h5cG94aWFfcGVyY2VudGlsZS5jc3YiKQpgYGAKCmBgYHtyfQpwZXJjLm9ydGhvICU+JSAKICBmaWx0ZXIoR2VuZSA9PSAiQUNTRjMiKSAlPiUKICBncm91cF9ieShkdXJhdGlvbikgJT4lCiAgdGFsbHkoKQpgYGAKCmBgYHtyIGZpZy53aWR0aD0yMCwgZmlnLmhlaWdodD0xNX0Kb3J0aG8ucGVyYy4xIDwtIGdncGxvdChwZXJjLm9ydGhvLCBhZXMocXVhbnRpbGUpKSArCiAgZ2VvbV9kZW5zaXR5KCkgKwogIGZhY2V0X3dyYXAofkdlbmUsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgdGhlbWVfcHVicigpCgpvcnRoby5wZXJjLjEgCgpvcnRoby5wZXJjLjIgPC0gZ2dwbG90KHBlcmMub3J0aG8sIGFlcyhxdWFudGlsZSwgZmlsbCA9IGR1cmF0aW9uKSkgKwogIGdlb21faGlzdG9ncmFtKCkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZmFjZXRfd3JhcCh+R2VuZSwgc2NhbGVzID0gImZyZWVfeSIpICsKICB0aGVtZV9wdWJyKCkKCm9ydGhvLnBlcmMuMiAKCm9ydGhvLnBlcmMuMyA8LSBnZ3Bsb3QocGVyYy5vcnRobywgYWVzKHF1YW50aWxlLCBmaWxsID0gY29uZGl0aW9uKSkgKwogIGdlb21faGlzdG9ncmFtKCkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZmFjZXRfd3JhcCh+R2VuZSwgc2NhbGVzID0gImZyZWVfeSIpICsKICB0aGVtZV9wdWJyKCkKCm9ydGhvLnBlcmMuMyAKCmdnc2F2ZShvcnRoby5wZXJjLjEsIGZpbGVuYW1lID0gIi4uL291dHB1dC9wbG90cy9wbG90LmRpc3QucGVyY2VudGlsZS5odW1hbi5oeXBveGlhLm9ydGhvbG9nLnBkZiIsIHdpZHRoID0gMjAsIGhlaWdodCA9IDE1KQpnZ3NhdmUob3J0aG8ucGVyYy4yLCBmaWxlbmFtZSA9ICIuLi9vdXRwdXQvcGxvdHMvcGxvdC5oaXN0LnBlcmNlbnRpbGUuZHVyYXRpb24uaHVtYW4uaHlwb3hpYS5vcnRob2xvZy5wZGYiLCB3aWR0aCA9IDIwLCBoZWlnaHQgPSAxNSkKZ2dzYXZlKG9ydGhvLnBlcmMuMywgZmlsZW5hbWUgPSAiLi4vb3V0cHV0L3Bsb3RzL3Bsb3QuaGlzdC5wZXJjZW50aWxlLmNvbmRpdGlvbi5odW1hbi5oeXBveGlhLm9ydGhvbG9nLnBkZiIsIHdpZHRoID0gMjAsIGhlaWdodCA9IDE1KQpgYGAKCmBgYHtyfQp0bXAgPC0gZGVzZXEucmVzICU+JQogIGZpbHRlcihncmVwbCgiUENLMSIsIGdlbmVfbmFtZSkpICU+JQogIHNlcGFyYXRlKGNvbCA9IHNhbXBsZXMsIGludG8gPSBjKCJkYXRhIiwgImNlbGwudHlwZSIsICJjb25kaXRpb24iLCAiZHVyYXRpb24iKSwgc2VwID0gIl8iLCApCnRtcApkZXNlcS5yZXMgJT4lCiAgZmlsdGVyKGdyZXBsKCJQQ0sxIiwgZ2VuZV9uYW1lKSkgJT4lCiAgZ2dwbG90KC4sIGFlcyhiYXNlTWVhbiwgbG9nMkZvbGRDaGFuZ2UsIGNvbCA9IHBhZGogPCAwLjA1KSkgKwogIGdlb21fcG9pbnQoKSArCiAgc2NhbGVfeF9sb2cxMCgpCmBgYAoKCgoKCgoKCgoKCgoKYGBge3J9CgpgYGAKCgoKCgpgYGB7cn0KZDIkbG9nMkZvbGRDaGFuZ2VbZDIkZ2VuZV9uYW1lICVpbiUgdGYuaGl0cyRHZW5lXQpgYGAKCg==